from flask import current_app
import os
import wave
import subprocess
import logging

logger = logging.getLogger(__name__)

def validate_audio_format(audio_file):
    """
    验证音频格式是否支持
    
    Args:
        audio_file: 上传的音频文件对象
        
    Returns:
        bool: 是否为支持的格式
    """
    if not audio_file or not audio_file.filename:
        return False
        
    # 获取文件扩展名
    _, ext = os.path.splitext(audio_file.filename.lower())
    
    # 支持的音频格式
    supported_formats = ['.wav', '.mp3', '.ogg']
    
    return ext in supported_formats

def validate_word_segments(word_segments):
    """
    验证单词分段数据格式
    
    Args:
        word_segments: 单词分段数据列表
        
    Returns:
        bool: 是否为有效格式
    """
    if not isinstance(word_segments, list):
        return False
        
    # 空列表也是有效的
    if not word_segments:
        return True
        
    # 验证每个分段
    for segment in word_segments:
        if not isinstance(segment, dict):
            return False
            
        # 检查必要字段
        required_fields = ['start_time', 'end_time', 'label']
        if not all(field in segment for field in required_fields):
            return False
            
        # 验证时间值
        try:
            start_time = float(segment['start_time'])
            end_time = float(segment['end_time'])
            
            # 检查时间逻辑
            if end_time <= start_time:
                return False
                
        except (ValueError, TypeError):
            return False
            
    return True

def get_audio_duration(file_path):
    """
    获取音频文件时长（秒）
    
    Args:
        file_path: 音频文件路径
        
    Returns:
        float: 音频时长（秒）
    """
    # 这里简化实现，实际应该使用音频处理库如pydub或librosa
    # 由于我们移除了数据库依赖，这里只返回一个模拟值
    try:
        # 根据文件大小估算时长（假设16kHz, 16bit, 单声道）
        file_size = os.path.getsize(file_path)
        estimated_duration = file_size / (16000 * 2)  # 字节数 / (采样率 * 每样本字节数)
        return estimated_duration
    except Exception as e:
        logger.error(f"获取音频时长失败: {str(e)}")
        return 0.0

def is_valid_audio_format(file_ext):
    """
    检查文件扩展名是否为有效的音频格式
    
    Args:
        file_ext: 文件扩展名
        
    Returns:
        bool: 是否为有效的音频格式
    """
    valid_formats = ['wav', 'mp3', 'ogg', 'flac', 'aac', 'm4a']
    return file_ext.lower() in valid_formats 